package com.zhugang.week13.law;

/**
 * @program algorithms
 * @description: isStraight
 * @author: chanzhugang
 * @create: 2022/09/11 12:35
 */
public class IsStraight {

    /**
     * 剑指offer 61 扑克牌中的顺子
     *
     * @param nums
     * @return
     */
    public boolean isStraight(int[] nums) {
        /**
         * 5张牌是连续的算顺子
         * 找规律得：1、非零元素、2、排除重复元素、3、max - min < 5
         * 有三种情况：中间三个数是数字肯定连续； 两个数字1个0也是连续；1个数字两个0也是连续
         */
        int max = -1;
        int min = 20;
        // 判重
        boolean[] duplicateArr = new boolean[14];
        for (int num : nums) {
            if (num != 0) {
                if (duplicateArr[num]) {
                    // 重复肯定不是顺子
                    return false;
                } else {
                    duplicateArr[num] = true;
                }

                max = Math.max(max, num);
                min = Math.min(min, num);
            }
        }
        return max - min < 5;
    }
}